package 尚硅谷juc大厂.test5;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;

public class Test5 {

    /**
     * 2个线程：main和future
     * future异步休眠2秒后执行，当future还在休眠的时候，main线程直接调用的 future.complete()，
     * 将future进行打断，打断后的future线程被直接杀死了，future内部的方法不再执行，而是拿到了-44结果
     * 怎么能看出future线程被直接杀死了呢？
     *   答：future异步休眠2秒，主线程休眠5秒。
     *   程序运行先创建future对象，然后sleep(2)，此时furture异步处于等待状态
     *   然后main线程还会继续向下执行，main执行到future.complete(-44)的时候，future还处于等待状态呢
     *   由于调用complete方法，那么future会被杀死，杀死后的future不再继续运行其内部逻辑了，而是直接返回-44的结果值
     *   然后main线程执行到sleep(5)的时候，main线程就会等待5秒，但是在这5秒内
     *   future内部的System.out.println("1111111111");并没有打印，说明future被杀死了
     *
     */
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> {
            try {
                TimeUnit.SECONDS.sleep(2);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("1111111111");

            return 1;
        });
        Integer now = future.getNow(-44);
        System.out.println(now);
        TimeUnit.SECONDS.sleep(5);
        System.out.println(future.get());
    }
}
